/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package es.fpsampayo.fin2006;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import es.fpsampayo.recursos.Conexion;
import java.sql.ResultSet;

/**
 *
 * @author fran
 */
public class ImportarFicheroPlano implements Runnable {

    /*ATRIBUTOS*/
    private File file;
    private boolean salir = false;
    public boolean isPadron;
    private String concello;
    private int anio;
    /*ATRIBUTOS*/

    /**
     *
     * @param anio
     */
    public void setAnio(int anio) {
        this.anio = anio;
    }

    public void setSalir(boolean salir) {
        this.salir = salir;
    }

    /**
     *
     * @param concello
     */
    public void setConcello(String concello) {
        this.concello = concello;
    }


    /*CONSTRUCTOR*/
    /**
     *
     * @param isPadron
     */
    public ImportarFicheroPlano(boolean isPadron) {
        this.isPadron = isPadron;
    }
    /*CONSTRUCTOR*/

    /**
     *
     * @param file
     */
    public void setFile(File file) {
        this.file = file;
    }

    /**
     *
     * @param file
     */
    public void importar(File file) {

        FileReader fr = null;
        BufferedReader br = null;

        try {
            // TODO add your handling code here:
            String s;
            int i = 0;
            int j = 0;
            int totalReg = contarRegistros(file);
            fr = new FileReader(file);
            br = new BufferedReader(fr);
            Conexion conexion = new Conexion();
            while ((s = br.readLine()) != null) {
                if (s.substring(0, 2).equals("11")) {
                    conexion.insertar(importarRegistro11(s));
                    i = i + 1;
                }
                /*else if(s.substring(0, 2).equals("12")){

                }
                else if(s.substring(0, 2).equals("13")){

                }*/

                j = j + 1;
                ImportarFichero.setTextoProgeso(j, totalReg);
                int progreso = (j * 100) / totalReg;
                ImportarFichero.setBarProgresoValue(progreso);

            }
            JOptionPane.showMessageDialog(null, "Se han insertado " + i + " registros en la Base de Datos.");
            JOptionPane.showMessageDialog(null, "Se ha terminado la operación correctamente.");
            conexion.Desconectar();


        } catch (IOException ex) {
            Logger.getLogger(ImportarFichero.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                fr.close();
            } catch (IOException ex) {
                Logger.getLogger(ImportarFichero.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /**
     *
     * @param file
     */
//    public void importarPadron(File file) {
//
//        FileReader fr = null;
//        BufferedReader br = null;
//
//        try {
//            // TODO add your handling code here:
//
//            int regInsertados = 0;
//            int regActual = 0;
//            int totalCaracteres = contarRegistrosPadron(file);
//            System.out.println("total caracteres: " + totalCaracteres);
//            int totalReg = (totalCaracteres + 1) / 1000;
//            System.out.println("total registros: " + totalReg);
//            String s;
//            fr = new FileReader(file);
//            br = new BufferedReader(fr);
//            Conexion conexion = new Conexion();
//            int inicio = 0;
//            int fin = 1000;
//            String sTexto;
//            sTexto = br.readLine();
//
//            while (regActual < totalReg) {
//                s = sTexto.substring(inicio, fin);
//                inicio = inicio + 1000;
//                fin = fin + 1000;
//
//                if (s.substring(0, 2).equals("53")) {
//                    conexion.insertar(importarRegistroPadron53(s));
//                    regInsertados = regInsertados + 1;
//                }
//                regActual = regActual + 1;
//                ImportarFichero.setTextoProgeso(regActual, totalReg);
//                int progreso = (regActual * 100) / totalReg;
//                ImportarFichero.setBarProgresoValue(progreso);
//                System.out.println("Registro String:" + regActual + ": " + s + "\n");
//            }
//
//            JOptionPane.showMessageDialog(null, "Se han insertado " + regInsertados + " registros en la Base de Datos.");
//            JOptionPane.showMessageDialog(null, "Se ha terminado la operación correctamente.");
//            conexion.Desconectar();
//
//        } catch (IOException ex) {
//            Logger.getLogger(ImportarFichero.class.getName()).log(Level.SEVERE, null, ex);
//        } finally {
//            try {
//                if (fr != null) {
//                    fr.close();
//                }
//            } catch (IOException ex) {
//                Logger.getLogger(ImportarFichero.class.getName()).log(Level.SEVERE, null, ex);
//            }
//        }
//    }

    /**
     *
     * @param file
     */
//    public void importarPadronArray(File file) {
//
//        FileReader fr = null;
//        BufferedReader br = null;
//
//        try {
//            int regInsertadosBI = 0;
//            int regInsertadosTI = 0;
//            int regActual = 0;
//            int totalCaracteres = contarRegistrosPadron(file);
//            System.out.println("total caracteres: " + totalCaracteres);
//            int totalReg = (totalCaracteres + 1) / 1000;
//            System.out.println("total registros: " + totalReg);
//            fr = new FileReader(file);
//            br = new BufferedReader(fr);
//            Conexion conexion = new Conexion();
//            int inicio = 0;
//            String sI;
//            char caracter[] = new char[1000];
//            br.mark(1000);
//            //while (br.read(new char[1000], inicio, 1000) != -1){
//
//            while (br.read(caracter) != -1) {
//                System.out.println("caracter 1 : " + caracter[0] + caracter[1]);
//                sI = String.valueOf(caracter);
//                if (sI.contains("'")) {
//                    sI = sI.replace("'", "´");
//                }
//                if (sI.substring(0, 2).equals("53")) {
//                    conexion.insertar(importarRegistroPadron53(sI));
//                    regInsertadosBI = regInsertadosBI + 1;
//                } else if (sI.substring(0, 2).equals("54")) {
//                    conexion.insertar(importarRegistroPadron54(sI));
//                    regInsertadosTI = regInsertadosTI + 1;
//                }
//                inicio = inicio + 1000;
//                System.out.println("Registro Array:" + regActual + ": " + sI + "\n");
//                regActual = regActual + 1;
//                ImportarFichero.setTextoProgeso(regActual, totalReg);
//                int progreso = (regActual * 100) / totalReg;
//                ImportarFichero.setBarProgresoValue(progreso);
//            }
//            sI = String.valueOf(caracter);
//            JOptionPane.showMessageDialog(null, "Se han insertado:\n" + regInsertadosBI + " registros Bien Inmueble.\n"
//                    + regInsertadosTI + " registros de Titulares.");
//            JOptionPane.showMessageDialog(null, "Se ha terminado la operación correctamente.");
//            conexion.Desconectar();
//
//        } catch (IOException ex) {
//            Logger.getLogger(ImportarFicheroPlano.class.getName()).log(Level.SEVERE, null, ex);
//        }
//
//    }

    private int contarRegistros(File file) throws IOException {
        FileReader fr = null;
        BufferedReader br = null;
        int i = 0;

        try {
            fr = new FileReader(file);
            br = new BufferedReader(fr);
            while (br.readLine() != null) {
                i = i + 1;
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ImportarFichero.class.getName()).log(Level.SEVERE, null, ex);
        }
        return i;
    }

//    private int contarRegistrosPadron(File file) throws IOException {
//        FileReader fr = null;
//        BufferedReader br = null;
//        int total_char = 0;
//
//        try {
//
//            fr = new FileReader(file);
//            br = new BufferedReader(fr);
//            total_char = br.readLine().length();
//
//        } catch (FileNotFoundException ex) {
//            Logger.getLogger(ImportarFichero.class.getName()).log(Level.SEVERE, null, ex);
//        } finally {
//            fr.close();
//        }
//        return total_char;
//    }

    private String importarRegistro11(String s) {

        String parcela = s.substring(30, 44);
        String codigo_via = s.substring(153, 158);
        String sigla = s.substring(158, 163);
        String nombre = s.substring(163, 188);

        System.out.println(parcela + "|" + codigo_via + "|" + sigla + "|" + nombre);

        String sql = "INSERT INTO public.parcelas(id_parcela,cod_via,sigla_via,nombre) VALUES (\'"
                + parcela + "\',\'"
                + codigo_via + "\',\'"
                + sigla + "\',\'"
                + nombre + "\');";
        return sql;
    }

//    private String importarRegistroPadron53(String s) {
//
//        int cod_delegacion = Integer.parseInt(s.substring(2, 4));
//        int cod_municipio_DGC = Integer.parseInt(s.substring(4, 7).trim());
//        String clase_BI = s.substring(7, 9);
//        String referencia_catastral = s.substring(9, 23);
//        String cargo = s.substring(23, 27);
//        String DC1 = s.substring(27, 28);
//        String DC2 = s.substring(28, 29);
//        String numero_fijo = s.substring(29, 37);
//        String identificacion_BI = s.substring(37, 52);
//        int cod_prov = Integer.parseInt(s.substring(52, 54));
//        String nombre_prov = s.substring(54, 79).trim();
//        int cod_municipio_DG = Integer.parseInt(s.substring(79, 82));
//        int cod_municipio_INE = Integer.parseInt(s.substring(82, 85));
//        String nombre_mun = s.substring(85, 125).trim();
//        String nombre_EM = s.substring(125, 155).trim();
//        int cod_via = Integer.parseInt(s.substring(155, 160));
//        String sg_via = s.substring(160, 165).trim();
//        String nombre_via = s.substring(165, 190).trim();
//        String num_pol1 = s.substring(190, 194);
//        if (num_pol1.equals("0000")) {
//            num_pol1 = "0";
//        } else {
//            num_pol1 = num_pol1.replace("0", "");
//        }
//        String dup1 = s.substring(194, 195);
//        String num_pol2 = s.substring(195, 199);
//        if (num_pol2.equals("0000")) {
//            num_pol2 = "0";
//        } else {
//            num_pol2 = num_pol2.replace("0", "");
//        }
//        String dup2 = s.substring(199, 200);
//        String km = s.substring(200, 205);
//        String bloque = s.substring(205, 209);
//        String escalera = s.substring(209, 211);
//        String planta = s.substring(211, 214);
//        String puerta = s.substring(214, 217);
//        String dir_no_estructurada = s.substring(217, 242);
//        String cod_postal = s.substring(242, 247);
//        String distrito = s.substring(247, 249);
//        String cod_mun_origen = s.substring(249, 252);
//        String zona_concentracion = s.substring(252, 254);
//        String poligono = s.substring(254, 257);
//        String parcela = s.substring(257, 262);
//        String paraje = s.substring(262, 292);
//        String anio_padron = s.substring(292, 296);
//        String valor_cat = s.substring(296, 308);
//        String valor_cat_suelo = s.substring(308, 320);
//        String valor_cat_construccion = s.substring(320, 332);
//        String base_liq = s.substring(332, 344);
//        String clave = s.substring(344, 345);
//        String importe_bonificacion = s.substring(345, 357);
//        String clave_bonificacion = s.substring(357, 358);
//        String superficie_construccion = s.substring(358, 368);
//        String superficie_suelo = s.substring(368, 378);
//        String coeficiente_prop = s.substring(378, 387);
//        String importe_valor_base = s.substring(387, 399);
//        String cod_proc = s.substring(399, 400);
//        String ejercicio_efectos = s.substring(400, 404);
//        String valor_cat_efectos = s.substring(404, 416);
//        String ejercicio_revision = s.substring(416, 420);
//        String ejercicio_revision_parcial = s.substring(420, 424);
//        String periodo_reduccion = s.substring(424, 426);
//        String cod_derecho_BI = s.substring(426, 428);
//        String num_titlurares = s.substring(428, 432);
//        String tipo_titulares = s.substring(432, 433);
//        String complemento = s.substring(433, 453);
//        String nif = s.substring(453, 462).trim();
//        String nombre = s.substring(462, 522).trim();
//        String clave_identificacion = s.substring(522, 530);
//
//        String sql = "INSERT INTO bien_inmueble("
//                + "cod_delegacion,"
//                + "cod_municipio_dgc,"
//                + "clase_bi,"
//                + "referencia_catastral,"
//                + "cargo,"
//                + "dc1,"
//                + "dc2,"
//                + "numero_fijo,"
//                + "identificacion_bi,"
//                + "cod_prov,"
//                + "nombre_prov,"
//                + "cod_municipio_dg,"
//                + "cod_municipio_ine,"
//                + "nombre_municipio,"
//                + "nombre_em,"
//                + "cod_via,"
//                + "sg_via,"
//                + "nombre_via,"
//                + "num_pol1,"
//                + "dup1,"
//                + "num_pol2,"
//                + "dup2,"
//                + "km,"
//                + "bloque,"
//                + "escalera,"
//                + "planta,"
//                + "puerta,"
//                + "dir_no_estructurada,"
//                + "cod_postal,"
//                + "distrito,"
//                + "cod_mun_origen, "
//                + "zona_concentracion,"
//                + "poligono,"
//                + "parcela,"
//                + "paraje,"
//                + "anio_padron,"
//                + "valor_cat,"
//                + "valor_cat_suelo,"
//                + "valor_car_construccion,"
//                + "base_liq,"
//                + "clave,"
//                + "importe_bonificacion,"
//                + "clave_bonificacion,"
//                + "superficie_construccion,"
//                + "superficie_suelo,"
//                + "coeficiente_prop,"
//                + "importe_valor_base,"
//                + "cod_proc,"
//                + "ejercicio_efectos,"
//                + "valor_cat_efectos,"
//                + "ejercicio_revision,"
//                + "ejercicio_revision_parcial,"
//                + "periodo_reduccion,"
//                + "cod_derecho_bi,"
//                + "num_titulares,"
//                + "tipo_titulares,"
//                + "complemento,"
//                + "nif,"
//                + "nombre,"
//                + "clave_identificacion,"
//                + "concello,"
//                + "anio)"
//                + "VALUES ("
//                + cod_delegacion + ","
//                + cod_municipio_DGC + ",\'"
//                + clase_BI + "\',\'"
//                + referencia_catastral + "\',\'"
//                + cargo + "\',\'"
//                + DC1 + "\',\'"
//                + DC2 + "\',\'"
//                + numero_fijo + "\',\'"
//                + identificacion_BI + "\',"
//                + cod_prov + ",\'"
//                + nombre_prov + "\',"
//                + cod_municipio_DG + ","
//                + cod_municipio_INE + ",\'"
//                + nombre_mun + "\',\'"
//                + nombre_EM + "\',"
//                + cod_via + ",\'"
//                + sg_via + "\',\'"
//                + nombre_via + "\',\'"
//                + num_pol1 + "\',\'"
//                + dup1 + "\',\'"
//                + num_pol2 + "\',\'"
//                + dup2 + "\',\'"
//                + km + "\',\'"
//                + bloque + "\',\'"
//                + escalera + "\',\'"
//                + planta + "\',\'"
//                + puerta + "\',\'"
//                + dir_no_estructurada + "\',\'"
//                + cod_postal + "\',\'"
//                + distrito + "\',\'"
//                + cod_mun_origen + "\',\'"
//                + zona_concentracion + "\',\'"
//                + poligono + "\',\'"
//                + parcela + "\',\'"
//                + paraje + "\',\'"
//                + anio_padron + "\',\'"
//                + valor_cat + "\',\'"
//                + valor_cat_suelo + "\',\'"
//                + valor_cat_construccion + "\',\'"
//                + base_liq + "\',\'"
//                + clave + "\',\'"
//                + importe_bonificacion + "\',\'"
//                + clave_bonificacion + "\',\'"
//                + superficie_construccion + "\',\'"
//                + superficie_suelo + "\',\'"
//                + coeficiente_prop + "\',\'"
//                + importe_valor_base + "\',\'"
//                + cod_proc + "\',\'"
//                + ejercicio_efectos + "\',\'"
//                + valor_cat_efectos + "\',\'"
//                + ejercicio_revision + "\',\'"
//                + ejercicio_revision_parcial + "\',\'"
//                + periodo_reduccion + "\',\'"
//                + cod_derecho_BI + "\',\'"
//                + num_titlurares + "\',\'"
//                + tipo_titulares + "\',\'"
//                + complemento + "\',\'"
//                + nif + "\',\'"
//                + nombre + "\',\'"
//                + clave_identificacion + "\',\'"
//                + concello + "\',"
//                + anio + ")";
//        return sql;
//    }
//
//    private String importarRegistroPadron54(String s) {
//
//
//        int id_bien_inmueble = 1;
//        int cod_delegacion = Integer.parseInt(s.substring(2, 4));
//        int cod_municipio_DGC = Integer.parseInt(s.substring(4, 7));
//        String clase_BI = s.substring(7, 9);
//        String referencia_catastral = s.substring(9, 23);
//        String cargo = s.substring(23, 27);
//        String DC1 = s.substring(27, 28);
//        String DC2 = s.substring(28, 29);
//        String numero_fijo = s.substring(29, 37);
//        String identificacion_BI = s.substring(37, 52);
//        String cod_derecho = s.substring(52, 54);
//        String porcentaje_derecho = s.substring(54, 59);
//        String nif = s.substring(59, 68).trim();
//        String nombre = s.substring(68, 128).trim();
//        String clave_d_interna = s.substring(128, 136);
//        int cod_prov = Integer.parseInt(s.substring(136, 138));
//        String nombre_prov = s.substring(138, 163).trim();
//        int cod_municipio = Integer.parseInt(s.substring(163, 166));
//        int cod_municipio_ine = Integer.parseInt(s.substring(166, 169));
//        String nombre_municipio = s.substring(169, 209).trim();
//        String nombre_em = s.substring(209, 239).trim();
//        int cod_via = Integer.parseInt(s.substring(239, 244));
//        String sg_via = s.substring(244, 249).trim().trim();
//        String nombre_via = s.substring(249, 274).trim();
//        String num_pol1 = s.substring(274, 278);
//        if (num_pol1.equals("0000")) {
//            num_pol1 = "0";
//        } else {
//            num_pol1 = num_pol1.replace("0", "");
//        }
//
//        String dup1 = s.substring(278, 279);
//        String num_pol2 = s.substring(279, 283);
//        if (num_pol2.equals("0000")) {
//            num_pol2 = "0";
//        } else {
//            num_pol2 = num_pol2.replace("0", "");
//        }
//        String dup2 = s.substring(283, 284);
//        String km = s.substring(284, 289);
//        String bloque = s.substring(289, 293);
//        String escalera = s.substring(293, 295);
//        String planta = s.substring(295, 298);
//        String puerta = s.substring(298, 301);
//        String dir_no_estructurada = s.substring(301, 326);
//        String cod_postal = s.substring(326, 331);
//        int apart_correos = Integer.parseInt(s.substring(331, 336));
//        String nif_cb = s.substring(336, 345);
//        String nombre_cb = s.substring(345, 405);
//        String tipo_exp_alteracion_juridica = s.substring(405, 409);
//        String fecha_alteracion_juridica = s.substring(409, 417);
//        String anio_exp_alteracion_juridica = s.substring(417, 421);
//        String ref_exp_dgc_origen = s.substring(423, 431);
//        int cod_entidad_origen_dgc = Integer.parseInt(s.substring(431, 434));
//        int anio_exp_ent_col = Integer.parseInt(s.substring(434, 438));
//        String ref_exp_ent_col = s.substring(438, 451);
//        String cod_ent_col_dgc = s.substring(451, 454);
//        int anio_padron = Integer.parseInt(s.substring(454, 458));
//
//        Conexion conexion = new Conexion();
//        ResultSet rs = conexion.Select("SELECT id FROM bien_inmueble WHERE referencia_catastral = \'" + referencia_catastral + "\' AND cargo = \'" + cargo + "\';");
//        try {
//            while (rs.next()) {
//                id_bien_inmueble = Integer.parseInt(rs.getObject("id").toString());
//                System.out.println("id_bien_inmueble: " + id_bien_inmueble);
//            }
//        } catch (SQLException ex) {
//            Logger.getLogger(ImportarFicheroPlano.class.getName()).log(Level.SEVERE, null, ex);
//        } finally {
//            conexion.Desconectar();
//        }
//
//        String sql = "INSERT INTO titulares("
//                + "id_bien_inmueble, cod_delegacion, cod_municipio_dgc, "
//                + "clase_bi, referencia_catastral, cargo, dc1, dc2, numero_fijo, "
//                + "identificacion_bi, cod_derecho, porcentaje_derecho, nif, nombre, "
//                + "clave_id_interna, cod_prov, nombre_prov, cod_municipio_dg, cod_municipio_ine, "
//                + "nombre_municipio, nombre_em, cod_via, sg_via, nombre_via, num_pol1, "
//                + "dup1, num_pol2, dup2, km, bloque, escalera, planta, puerta, dir_no_estructurada, "
//                + "cod_postal, apart_correos, nif_cb, nombre_cb, tipo_exp_alteracion_juridica, "
//                + "fecha_alteracion_juridica, anio_exp_alteracion_juridica, ref_exp_dgc_origen, "
//                + "cod_entidad_origen_dgc, anio_exp_ent_col, ref_exp_ent_col, cod_ent_col_dgc, "
//                + "anio_padron, concello, anio) "
//                + "VALUES ("
//                + id_bien_inmueble + ","
//                + cod_delegacion + ","
//                + cod_municipio_DGC + ",\'"
//                + clase_BI + "\',\'"
//                + referencia_catastral + "\',\'"
//                + cargo + "\',\'"
//                + DC1 + "\',\'"
//                + DC2 + "\',\'"
//                + numero_fijo + "\',\'"
//                + identificacion_BI + "\',\'"
//                + cod_derecho + "\',\'"
//                + porcentaje_derecho + "\',\'"
//                + nif + "\',\'"
//                + nombre + "\',\'"
//                + clave_d_interna + "\',"
//                + cod_prov + ",\'"
//                + nombre_prov + "\',"
//                + cod_municipio + ","
//                + cod_municipio_ine + ",\'"
//                + nombre_municipio + "\',\'"
//                + nombre_em + "\',"
//                + cod_via + ",\'"
//                + sg_via + "\',\'"
//                + nombre_via + "\',\'"
//                + num_pol1 + "\',\'"
//                + dup1 + "\',\'"
//                + num_pol2 + "\',\'"
//                + dup2 + "\',\'"
//                + km + "\',\'"
//                + bloque + "\',\'"
//                + escalera + "\',\'"
//                + planta + "\',\'"
//                + puerta + "\',\'"
//                + dir_no_estructurada + "\',\'"
//                + cod_postal + "\',"
//                + apart_correos + ",\'"
//                + nif_cb + "\',\'"
//                + nombre_cb + "\',\'"
//                + tipo_exp_alteracion_juridica + "\',\'"
//                + fecha_alteracion_juridica + "\',\'"
//                + anio_exp_alteracion_juridica + "\',\'"
//                + ref_exp_dgc_origen + "\',"
//                + cod_entidad_origen_dgc + ","
//                + anio_exp_ent_col + ",\'"
//                + ref_exp_ent_col + "\',\'"
//                + cod_ent_col_dgc + "\',"
//                + anio_padron + ",\'"
//                + concello + "\',"
//                + anio + ")";
//
//        System.out.println(sql);
//
//        return sql;
//    }
//    
    private String importarRegistroCat11 (String s){
        String sql = null;
        
        
        return sql;
    }
    
    private String importarRegistroCat13(String s){
        String sql = null;
        
        
        return sql;
    }

    private String importarRegistroCat14 (String s){
        String sql = null;
        
        
        return sql;
    }
    
    private String importarRegistroCat15 (String s){
        String sql = null;
        
        
        return sql;
    }
    
    private String importarRegistroCat16 (String s){
        String sql = null;
        
        
        return sql;
    }
    
    private String importarRegistroCat17 (String s){
        String sql = null;
        
        
        return sql;
    }
    
    @Override
    public void run() {

        if (isPadron) {
            while (salir == false) {
                importar(file);
//                importarPadronArray(file);
            }
        } else {
            while (salir == false) {
                importar(file);
            }
        }
        //throw new UnsupportedOperationException("Not supported yet.");
    }
}
